package com.pig4cloud.pigx.contract.executer.k_line.canceler;

import com.pig4cloud.pigx.common.customize.contants.SystemConfigConstants;
import com.pig4cloud.pigx.contract.mongo.entity.ContractKLineTradeCacheMongo;
import com.pig4cloud.pigx.contract.utils.ContractUtils;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;

/**
 * 抽象k线处理器
 *
 * @since 2022/8/17 11:17
 */
@Slf4j
@Component
@AllArgsConstructor
public class KlineCanceler {

    protected final MongoTemplate mongo;

    private final ContractUtils utils;

    /**
     * 更新各币对最新成交记录
     *
     * @param vo 成交记录详情
     */
    public void initNewestTrade(ContractKLineTradeCacheMongo vo) {
        try {
            // 以币对名称设置集合名，没有集合则创建
            String collectionName = vo.getSymbolName() + "_newest_trade";
            boolean exists = mongo.collectionExists(collectionName);
            if (!exists) {
                // 集合封顶字节大小
                Long size = 1073741824L;
                // 集合封顶数据条数
                Long maxDocuments = 20L;
                // 新建集合
                mongo.createCollection(collectionName, new CollectionOptions(size, maxDocuments, true));
            }
            // 上限20条，直接插入覆盖
            vo.setNum(vo.getNum().divide(vo.getPrice(), SystemConfigConstants.amountScale, SystemConfigConstants.mainCurRoundingMode));
            mongo.insert(vo, collectionName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 新增成交记录时给K线缓存定量临时数据
     * ※※※※※※※※※※暂停使用※※※※※※※※※※
     *
     * @param vo 成交记录详情
     */
    public void initKlineTradeCache(ContractKLineTradeCacheMongo vo) {
//		try {
//			String collectionName = "k_line_trade_cache";
//			boolean exists = mongo.collectionExists(collectionName);
//			if (!exists) {
//				// 集合封顶字节大小
//				Long size = 1073741824L;
//				// 集合封顶数据条数
//				Long maxDocuments = 100L;
//				// 索引
//				List<IndexModel> indexModels = new ArrayList<>();
//				BasicDBObject index1 = new BasicDBObject();
//				index1.put("createTime",1);
//				indexModels.add(new IndexModel(index1));
//				BasicDBObject index2 = new BasicDBObject();
//				index2.put("symbolId",1);
//				indexModels.add(new IndexModel(index2));
//				// 新建集合
//				mongo.createCollection(collectionName, new CollectionOptions(size, maxDocuments, true)).createIndexes(indexModels);
//			}
//			mongo.insert(vo,collectionName);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
    }
}
